最近有一部很火紅的電影 - 天能,身邊朋友們都說好看,還有人想三刷,今天我也去看了,沒想到已經上映二十多天了,竟然還是爆滿,只剩前排和最後一排的角落!
如果你也喜歡諾蘭的電影,就收下這張圖吧~
上次我們才剛聊到 Neo4j 的資料庫查詢語言 Cypher
,並給大家簡短的範例做為開場,今天我們就來更近一步認識這個看似 SQL
的語言吧
如果你安裝的是新版的 Neo4j Desktop,那麼預設就會有一個 Neo4j Primer Project,裡頭包含了一個 Movie Database;如果沒有這個 資料庫,請在指令區輸入
:play movie-graph
會跳出電影資料庫的教學,翻到第二頁後點選 CREATE 指令如圖
執行後就會產生電影資料庫囉!(請只執行一次)
Movie DB 是內建的迷你電影資料庫,儲存著許多電影、導演以及演員們的關係圖,是官方作為 Cypher 語法教學與練習的基礎。
如果你想看 Cypher 完全基礎教學,請輸入
:play cypher
這邊我不打算非常細節的從基礎說起,官方的教學已經很好懂囉~ 我直接合併或列出官方比較進階的範例,然後告訴你他在做些什麼
請找出湯姆漢克有演的電影,年份是 1990 ~ 2000,最多列出 10 筆
MATCH (tom:Person {name: "Tom Hanks"})-[:ACTED_IN]->(tomHanksMovies)
WHERE tomHanksMovies.released >= 1990 AND tomHanksMovies.released < 2000
RETURN tom, tomHanksMovies
LIMIT 10
請找出電影「雲圖」的所有導演,而這些導演們還有哪些其他作品?
MATCH (cloudAtlas {title: "Cloud Atlas"})<-[:DIRECTED]-(directors)-[:DIRECTED]->(m)
RETURN *
請找出有哪些人曾和湯姆漢克一起演出,分別是哪些電影?
MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors)
RETURN coActors
請列出所有跟電影「雲圖」有關的人有誰?分別是什麼樣的關係?
MATCH (people:Person)-[relatedTo]-(:Movie {title: "Cloud Atlas"}) RETURN people.name, Type(relatedTo), relatedTo
這個查詢將關係當做了變數做查詢,所以導演或演員們都會被找出。
接下來我們試著新增自己喜歡的電影、導演和演員們
首先我們看看克里斯多福·諾蘭有沒有存在資料庫中
MATCH (p:Person) WHERE p.name =~ '.*Nolan.*'
RETURN p
這是以規則運算式來做查詢,只要名字包含了 "Nolan",就會被找到,就像是 SQL 的 LIKE 語法;做 LIKE 查詢還有一個方法如下:
MATCH (p:Person) WHERE p.name CONTAINS 'Nolan'
RETURN p
查詢結果是,這位大導演還未被加入這個電影資料庫,那我們自己來建立吧!這邊我想改用中文,畢竟在台灣,大部分還是會以中譯來稱呼。
CREATE (nolan:Person {name: '諾蘭'}),
(m1:Movie {title: '星際效應', released: 2014}),
(m2:Movie {title: '全面啟動', released: 2010}),
(m3:Movie {title: 'TENET天能', released: 2020}),
(nolan)-[:DIRECTED]->(m1),
(nolan)-[:DIRECTED]->(m2),
(nolan)-[:DIRECTED]->(m3)
讀者們可以試著自己建立諾蘭的所有電影和演員們,就會得到很豐富的關係圖囉!
接下來幾天,會繼續跟大家分享各種 Cypher 查詢語法,讓你可以很快地建立自己喜歡的圖資~